package com.centerm.structure.service;

import java.util.List;

import javax.servlet.http.HttpSession;

import com.centerm.common.view.page.PageQueryResult;
import com.centerm.structure.domain.Department;
import com.centerm.structure.domain.User;
import com.centerm.structure.dto.DepartmentInfo;
import com.centerm.structure.dto.DepartmentTreeInfo;

/**
 * Department 部门Service层接口
 * 
 * @author czy
 *
 */
public interface DepartmentService {
	
    /**
     * @Description 查询分页记录列表
     * @author czy
     * @date 2017年8月8日
     * @param pageNum:页数，pageSize:每页记录数
     * @return PageQueryResult<DepartmentInfo>
     */
    PageQueryResult<DepartmentInfo> pageDepartmentInfoList(Integer pageNum, Integer pageSize,DepartmentInfo departmentInfo);
    
    /**
     * @Description 新增记录信息
     * @author czy
     * @date 2017年8月8日
     * @param 记录id
     * @return 
     */
    Integer insert(DepartmentInfo departmentInfo);
    
    /**
     * @Description 修改记录信息
     * @author czy
     * @date 2017年8月8日
     * @param DepartmentInfo
     * @return 更新记录数
     */
    Integer update(DepartmentInfo departmentInfo);
    
    /**
     * @Description 删除记录信息
     * @author czy
     * @date 2017年8月8日
     * @param 记录id
     * @return 删除记录数
     */
    Integer delete(Integer id);
    
	/**
	 * 根据id获取部门详细信息
     * @author czy
     * @date 2017年8月8日
     * @param 记录id
	 * @return 部门详细信息
	 */
    DepartmentInfo getById(Integer id);

    /**
	 * @Description: 
	 *   获得所有部门和人员---树结构形式
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点
	 * @return 
	 */
	List<DepartmentTreeInfo> loadDepartmentTree(Integer parentId);
	
    /**
	 * @Description: 
	 *   获得当前父节点的子部门和人员
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点
	 * @return 
	 */
	List<DepartmentTreeInfo> loadCurrentDepartmentTree(Integer parentId);
	
	/**
	 * @Description: 
	 *   根据父节点id获得所有子部门
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点
	 * @return 
	 */
	List<Department> listDepartmentByParentId(Integer parentId);
	
	/**
	 * @Description: 
	 *   根据父节点id获得所有用户
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点
	 * @return 
	 */
	List<User> listUserByDepartmentId(Integer departmentId);
	
	/**
	 * @Description: 
	 *   判断childId是否包含在parentId的所有子层中
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点；childId:孩子节点
	 * @return 
	 */
	Boolean isChild(Integer parentId,Integer childId);
	
	/**
	 * @Description: 判断当前用户是否可管理部门信息
	 * @author czy
	 * @date 2017年8月23日
	 * @param httpSession
	 *            :用户session,departmentId:部门id
	 * @return boolean
	 */
	Boolean isManagerOfDeparment(HttpSession httpSession,
			Integer departmentId);

    /**
     * @Description 获取所有部门信息
     * @author lk
     * @date 2017年8月30日
     * @return
     */
    List<Department> listAll();

    /**
     * @Description 获取部门详细信息（包括人员）
     * @author lk
     * @date 2017年8月31日
     * @param id
     * @return
     */
    DepartmentInfo getDetailInfoById(DepartmentInfo departmentInfo);

    /**
     * @Description 根据部门ID获取子部门ID
     * @author lk
     * @date 2017年9月1日
     * @param departmentInfo
     * @return
     */
    List<Integer> listDepartmentIdByParentId(Integer parentId);
    
    /**
     * @Description 根据部门管理员ID获取下属所有部门信息
     * @author lk
     * @date 2017年9月5日
     * @param manager
     * @return
     */
    List<Department> listByManager(Integer manager);

}
